home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MYUTIL / DISKMAGI.M < prev    next >
Encoding:
Text File  |  1989-05-24  |  2.8 KB  |  104 lines

  1. MODULE DiskMagic;
  2.  
  3. (*
  4.  * Trägt eine Zufallszahl im 'Magic' des Bootsektors ein.
  5.  *)
  6.  
  7. FROM SYSTEM IMPORT VAL, BYTE, ADR;
  8.  
  9. FROM BIOS IMPORT DriveMap, DriveSet, RWAbs, BPB, BPBPtr, RW, GetBPB;
  10.  
  11. FROM SysUtil1 IMPORT Poke;
  12.  
  13. FROM RandomGen IMPORT RandomCard;
  14.  
  15. FROM InOut IMPORT WriteString, WriteCard, WriteLn, GotoXY, WritePg;
  16. IMPORT InOut;
  17.  
  18.  
  19. PROCEDURE drvno (c:CHAR): CARDINAL;
  20.   BEGIN
  21.     RETURN ORD (CAP (c)) - ORD ('A')
  22.   END drvno;
  23.  
  24. TYPE CharSet = SET OF CHAR;
  25.  
  26. VAR sd: CHAR;
  27.     sn: CARDINAL;
  28.     drives: DriveSet;
  29.     p: BPBPtr;
  30.     inf: BPB;
  31.     ch: CHAR;
  32.     l: LONGINT;
  33.  
  34.  
  35. PROCEDURE info (n: CARDINAL);
  36.   BEGIN
  37.     WriteString ('  Drive ');
  38.     WriteString (CHR (n + ORD ('A')));
  39.     WriteString (':');
  40.     WriteLn;
  41.     WriteString ('  Size: ');
  42.     WriteCard (inf.numcl,0);
  43.     WriteString (' KB');
  44.     WriteLn;
  45.   END info;
  46.  
  47. TYPE Byte3 = ARRAY [1..3] OF BYTE;
  48. VAR buf: ARRAY [0..511] OF BYTE;
  49.     b3: Byte3;
  50.  
  51. BEGIN
  52.   drives:= DriveMap ();
  53.   WriteLn;
  54.   WriteString ('Randomize "Magic"');
  55.   WriteLn;
  56.   WriteLn;
  57.   
  58.   WriteString ('Drive (A-P) ? ');
  59.   InOut.Read (sd); sd:= CAP (sd);
  60.   IF NOT ( sd IN CharSet {'A'..'P'} ) THEN RETURN END;
  61.   IF NOT ( drvno (sd) IN drives ) THEN
  62.     WriteString ('Not online'); InOut.Read (ch); RETURN
  63.   END;
  64.   WriteLn;
  65.   
  66.   sn:= drvno (sd);
  67.   
  68.   p:= GetBPB (sn);
  69.   IF p = NIL THEN WriteString ('Not online'); InOut.Read (ch); RETURN END;
  70.   inf:= p^;
  71.   
  72.   WriteLn;
  73.   info (sn);
  74.  
  75.   WriteLn;
  76.   WriteString ('Randomize (Y/N) ? ');
  77.   InOut.Read (ch);
  78.   IF CAP (ch) <> 'Y' THEN RETURN END;
  79.  
  80.   l:= RWAbs (ReadNoMediaChange, ADR (buf), 1, 0, sn);
  81.   IF l # 0L THEN
  82.     WriteLn; WriteString ('Read error '); InOut.WriteInt (l,0); InOut.Read (ch);
  83.     RETURN
  84.   END;
  85.   l:= LONG (RandomCard (1,MaxCard)) + LONG (MaxCard) * LONG (RandomCard (1,255));
  86.   ASSEMBLER
  87.         MOVE.L  l,D0
  88.         LEA     b3,A0
  89.         MOVE.W  D0,(A0)
  90.         SWAP    D0
  91.         MOVE.B  D0,2(A0)
  92.   END;
  93.   (* mag Compiler nicht:  b3:= VAL (Byte3, l); *)
  94.   Poke (ADR (buf[8]), b3);
  95.   l:= RWAbs (WriteNoMediaChange, ADR (buf), 1, 0, sn);
  96.   IF l # 0L THEN
  97.     WriteLn; WriteString ('Write error '); InOut.WriteInt (l,0); InOut.Read (ch);
  98.     RETURN
  99.   END;
  100.  
  101. END DiskMagic.
  102. ə
  103. (* $000007F4$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$000007F6$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530$FFF39530Ç$0000051BT.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$000006AD$000006C6$000008A2$00000889$00000566$FFF3CB02$0000051B$000004DC$0000065C$00000837$00000010$000008D3$FFF408D0$FFF408D0$FFF408D0$000001FCãÇÇ*)
  104.